package family

import (
	"errors"
	"homeserver/worker"
)

// 家庭中心服务运行实体
var (
	SevFamilyHandle *SevFamily = nil
)


// 成员终端对家庭的请求操作
func RequestOperate(buffer []byte) (err error) {
	if SevFamilyHandle.request != nil {
		SevFamilyHandle.request <- buffer
		return
	}
	return errors.New("family service error")
}


// 将家庭产生的通知消息发送给成员连接中断
func notifyMembers(notify []byte) error {

	familyLogger.Info("notify: %s", string(notify))

	if membersNotifyObject != nil {
		membersNotifyObject.HandleNotify(notify)
	}

	return nil
}

// 对设备的操作请求
func requestDevice(request []byte) error {
	return worker.RequestDevice(request)
}


//
// 成员服务向家庭中心订阅消息的接口
// 成员登陆操作的web服务 已经移动端mobile服务均可以通过此接口想家庭服务订阅通知消息
//
type SubScribeNotifyInterface interface {
	HandleNotify(buffer []byte) (err error)
}

//
// 当前只有WEB端，先写成变量的形式先
//
var membersNotifyObject SubScribeNotifyInterface = nil

//
// 订阅消息接口
//
func SubscribeNotify(sev SubScribeNotifyInterface) {
	membersNotifyObject = sev
}

//
// 家庭服务
//
func StartService(end chan bool) {
	familyLogger.Info("family: service")

	DevicesConf()
	FamilyConf()

	StartSevFamily(end)
}